realtek: pcs: add init_serdes_common hook
authorJonas Jelonek <[email protected]>
Fri, 7 Nov 2025 12:16:45 +0000 (12:16 +0000)
committerHauke Mehrtens <[email protected]>
Mon, 8 Dec 2025 23:27:57 +0000 (00:27 +0100)
Add a new hook called 'init_serdes_common' to be able to perform
initialisations or anything else subject to all SerDes. This hook is
called in the end of 'rtpcs_probe' after everything else is done.

This is meant primarily to support the transition of RTL83XX from PHY
driver to PCS driver. Thus, it may be removed later again or kept if
there is sufficient need for this.

Signed-off-by: Jonas Jelonek <[email protected]>
Link: https://github.com/openwrt/openwrt/pull/20876
Signed-off-by: Hauke Mehrtens <[email protected]>
target/linux/realtek/files-6.12/drivers/net/pcs/pcs-rtl-otto.c

index 2f0ff0ce031fabfaf4bcd3f65ce551908ce204c5..2fa500396a90ad2ea2fd297f536a782633d1cd39 100644 (file)
@@ -122,6 +122,7 @@ struct rtpcs_config {
        int mac_rx_pause_sts;
        int mac_tx_pause_sts;
        const struct phylink_pcs_ops *pcs_ops;
+       int (*init_serdes_common)(struct rtpcs_ctrl *ctrl);
        int (*set_autoneg)(struct rtpcs_ctrl *ctrl, int sds, unsigned int neg_mode);
        int (*setup_serdes)(struct rtpcs_ctrl *ctrl, int sds, phy_interface_t mode);
 };
@@ -2769,6 +2770,12 @@ static int rtpcs_probe(struct platform_device *pdev)
                ctrl->tx_pol_inv[sds] = of_property_read_bool(child, "realtek,pnswap-tx");
        }
 
+       if (ctrl->cfg->init_serdes_common) {
+               ret = ctrl->cfg->init_serdes_common(ctrl);
+               if (ret)
+                       return ret;
+       }
+
        /*
         * rtpcs_create() relies on that fact that data is attached to the platform device to
         * determine if the driver is ready. Do this after everything is initialized properly.